package com.ruoyi.fk.service.impl;

import java.util.List;
import java.util.Map;
import java.beans.Transient;
import java.util.Date;

import com.ruoyi.fk.domain.QuestionBankVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ruoyi.fk.mapper.QuestionBankMapper;
import com.ruoyi.fk.domain.QuestionBank;
import com.ruoyi.fk.domain.BankQuestionMapping;
import com.ruoyi.fk.service.IQuestionBankService;

/**
 * 题库管理Service业务层处理
 * 
 * @author fengkun
 * @date 2025-08-12
 */
@Service
public class QuestionBankServiceImpl implements IQuestionBankService 
{
    @Autowired
    private QuestionBankMapper questionBankMapper;

    /**
     * 查询题库管理
     * 
     * @param id 题库管理主键
     * @return 题库管理
     */
    @Override
    public QuestionBank selectQuestionBankById(Integer id)
    {
        return questionBankMapper.selectQuestionBankById(id);
    }

    /**
     * 查询题库管理列表
     * 
     * @param questionBank 题库管理
     * @return 题库管理集合
     */
    @Override
    public List<QuestionBank> selectQuestionBankList(QuestionBank questionBank)
    {
        return questionBankMapper.selectQuestionBankList(questionBank);
    }
    //章节练习查询，微信程序端
    @Override
    public List<QuestionBankVO> selectQuestionBankChapterList(QuestionBankVO questionBankVO) {
        return questionBankMapper.selectQuestionBankChapterList(questionBankVO);
    }

    //章节练习查询，vue端，用id查
    @Override
    public QuestionBankVO selectQuestionBankChapterById(Integer id) {
        List<QuestionBankVO> list = questionBankMapper.selectQuestionBankChapterById(id);
        // 如果有多条记录，取第一条或者根据业务逻辑处理
        if (list != null && !list.isEmpty()) {
            return list.get(0);  // 取第一条记录
        }
        return null;
    }

    /**
     * 新增题库管理
     * 
     * @param questionBank 题库管理
     * @return 结果
     */
    @Override
    public int insertQuestionBank(QuestionBank questionBank)
    {
        return questionBankMapper.insertQuestionBank(questionBank);
    }

    /**
     * 修改题库管理
     * 
     * @param questionBank 题库管理
     * @return 结果
     */
    @Override
    public int updateQuestionBank(QuestionBank questionBank)
    {
        return questionBankMapper.updateQuestionBank(questionBank);
    }

    /**
     * 批量删除题库管理
     * 
     * @param ids 需要删除的题库管理主键
     * @return 结果
     */
    @Override
    public int deleteQuestionBankByIds(Integer[] ids)
    {
        return questionBankMapper.deleteQuestionBankByIds(ids);
    }

    /**
     * 删除题库管理信息
     * 
     * @param id 题库管理主键
     * @return 结果
     */
    @Override
    public int deleteQuestionBankById(Integer id)
    {
        return questionBankMapper.deleteQuestionBankById(id);
    }

    /**
     * 根据题库ID查询相关联的题目信息
     * 
     * @param bankId 题库ID
     * @return 题目信息列表
     */
    @Override
    public List<Map<String, Object>> selectQuestionsByBankId(Integer bankId)
    {
        return questionBankMapper.selectQuestionsByBankId(bankId);
    }

    /**
     * 批量添加题库题目关联
     * 
     * @param mappings 关联关系列表
     * @return 结果
     */
    @Override
    public int batchInsertBankQuestionMapping(List<BankQuestionMapping> mappings)
    {
        if (mappings == null || mappings.isEmpty()) {
            return 0;
        }
        
        // 获取第一个映射的题库ID（假设所有映射都是同一个题库）
        Integer bankId = mappings.get(0).getBankId();
        
        // 检查是否已经存在关联关系
        for (BankQuestionMapping mapping : mappings) {
            // 这里可以添加更详细的检查逻辑，比如检查题目是否存在等
            if (mapping.getBankId() == null || mapping.getQuestionId() == null) {
                throw new IllegalArgumentException("题库ID或题目ID不能为空");
            }
        }
        
        return questionBankMapper.batchInsertBankQuestionMapping(mappings);
    }

    /**
     * 批量删除题库题目关联
     * 
     * @param mappings 关联关系列表
     * @return 结果
     */
    @Override
    public int batchDeleteBankQuestionMapping(List<BankQuestionMapping> mappings)
    {
        return questionBankMapper.batchDeleteBankQuestionMapping(mappings);
    }

    /**
     * 根据题库ID删除所有关联的题目
     * 
     * @param bankId 题库ID
     * @return 结果
     */
    @Override
    public int deleteQuestionsByBankId(Integer bankId)
    {
        return questionBankMapper.deleteQuestionsByBankId(bankId);
    }

    /**
     * 根据题目ID删除所有关联的题库
     * 
     * @param questionId 题目ID
     * @return 结果
     */
//    @Override
//    public int deleteBanksByQuestionId(Integer questionId)
//    {
//        return questionBankMapper.deleteBanksByQuestionId(questionId);
//    }

    /**
     * 查询题库中未关联的题目
     * 
     * @param params 查询参数
     * @return 题目列表
     */
    @Override
    public List<Map<String, Object>> selectUnlinkedQuestions(Map<String, Object> params)
    {
        return questionBankMapper.selectUnlinkedQuestions(params);
    }

    /**
     * 检查关联关系是否存在
     * 
     * @param params 包含bankId和questionId的Map
     * @return 存在数量
     */
    @Override
    public Integer checkMappingExists(Map<String, Object> params)
    {
        return questionBankMapper.checkMappingExists(params);
    }

    @Override
    public List<QuestionBank> selectQuestionBankListByIds(List<Integer> ids) {
        return questionBankMapper.selectQuestionBankListByIds(ids);
    }

    /**
     * 检查用户是否购买指定题库
     *
     * @param userId 用户ID
     * @param questionBankId 题库ID
     * @return 是否已购买
     */
    @Override
    @Transactional
    public boolean checkUserQuestionBankPurchase(Long userId, Integer questionBankId) {
        // 直接检查用户在user_question_bank表中是否有该题库的记录
        return questionBankMapper.checkUserQuestionBankAccess(userId, questionBankId);
    }
}
